package cn.tedu.v3;

import java.io.*;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

/**
 * 多人聊天室 Version 3
 * 功能：一个客户端与一个服务器端相互聊天
 * 1.客户端--链接服务器---第一件事：写出
 * 2.客户端--读入--存线程中，对应服务器的读入
 *
 */

public class Client {
    private Socket socket;
    BufferedReader br=null;
    //1.私有化IP
    private String ip;

    public Client() {
        try {
            socket = new Socket("192.168.186.187", 6666);
            //2.确定传入IP就是当前IP地址
            ip=socket.getInetAddress().getHostAddress();
        } catch(UnknownHostException e){
            System.out.println("IP地址有问题，请询问服务器端！");
        } catch (IOException e) {
            System.out.println("客户端主动退出了：断开链接");
        }
    }
    //1.start方法：IO流操作：写出功能，实现读入功能交给线程处理
    public void start() {
        PrintWriter pw = null;
        //1.6 置空流--赋值、关闭流【br  作用域】
        //BufferedReader br=null;
        try {
            //1.2读入操作
            BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF8"));

            //1.1写出操作
            pw = new PrintWriter( new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF8")), true);

            //1.3创建线程---Lambda--读入功能--存线程中
           new Thread(()->{
               try {
                   //1.4  线程中--创建变量---接收服务器端发来的文本
                   String message;
                   //1.5  一直接受客户端发来的消息:message只要有数据一直输出
                   while((message=br.readLine())!=null){
                       System.out.println("服务器说："+message);
                       //1.6增加一句--每次客户端发给服务器内容
                       System.out.println("客户端请输入：");
                   }
               } catch (IOException e) {
                   System.out.println("服务器端发来的消息断开了~");
               }
           }).start();



            Scanner input = new Scanner(System.in);
            while (true) {
                System.out.println("客户端请输入:");
                String say = input.nextLine();
                pw.println("客户端说："+say);
            }

        } catch (UnsupportedEncodingException e) {
            System.out.println("客户端与服务器端：字符集不一致");
        } catch (IOException e) {
            System.out.println("客户端断开了链接！");
        } finally {
            //关闭流   关闭socket
            if (pw != null)
                 pw.close();

            if(socket!=null&&!socket.isClosed()){
                System.out.println("客户端关闭成功！success~");
                try {
                    socket.close();
                } catch (IOException e) {
                    System.out.println("客户端关闭失败");
                }
            }
        }

//读入
       /* while(true){
         String str=br.readLine();
            System.out.println(""+str);
        }*/
    }

    public static void main(String[] args)  {
        Client client=new Client();
        client.start();
    }
}
